<!doctype html>
<html>
<head>
<meta charset='UTF-8'><meta name='viewport' content='width=device-width initial-scale=1'>
<title>简历</title><link href='https://fonts.loli.net/css?family=Open+Sans:400italic,700italic,700,400&subset=latin,latin-ext' rel='stylesheet' type='text/css' /><style type='text/css'>html {overflow-x: initial !important;}:root { --bg-color:#ffffff; --text-color:#333333; --select-text-bg-color:#B5D6FC; --select-text-font-color:auto; --monospace:"Lucida Console",Consolas,"Courier",monospace; --title-bar-height:20px; }
.mac-os-11 { --title-bar-height:28px; }
html { font-size: 14px; background-color: var(--bg-color); color: var(--text-color); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; }
body { margin: 0px; padding: 0px; height: auto; bottom: 0px; top: 0px; left: 0px; right: 0px; font-size: 1rem; line-height: 1.42857; overflow-x: hidden; background: inherit; tab-size: 4; }
iframe { margin: auto; }
a.url { word-break: break-all; }
a:active, a:hover { outline: 0px; }
.in-text-selection, ::selection { text-shadow: none; background: var(--select-text-bg-color); color: var(--select-text-font-color); }
#write { margin: 0px auto; height: auto; width: inherit; word-break: normal; overflow-wrap: break-word; position: relative; white-space: normal; overflow-x: visible; padding-top: 36px; }
#write.first-line-indent p { text-indent: 2em; }
#write.first-line-indent li p, #write.first-line-indent p * { text-indent: 0px; }
#write.first-line-indent li { margin-left: 2em; }
.for-image #write { padding-left: 8px; padding-right: 8px; }
body.typora-export { padding-left: 30px; padding-right: 30px; }
.typora-export .footnote-line, .typora-export li, .typora-export p { white-space: pre-wrap; }
.typora-export .task-list-item input { pointer-events: none; }
@media screen and (max-width: 500px) {
  body.typora-export { padding-left: 0px; padding-right: 0px; }
  #write { padding-left: 20px; padding-right: 20px; }
  .CodeMirror-sizer { margin-left: 0px !important; }
  .CodeMirror-gutters { display: none !important; }
}
#write li > figure:last-child { margin-bottom: 0.5rem; }
#write ol, #write ul { position: relative; }
img { max-width: 100%; vertical-align: middle; image-orientation: from-image; }
button, input, select, textarea { color: inherit; font: inherit; }
input[type="checkbox"], input[type="radio"] { line-height: normal; padding: 0px; }
*, ::after, ::before { box-sizing: border-box; }
#write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p, #write pre { width: inherit; }
#write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p { position: relative; }
p { line-height: inherit; }
h1, h2, h3, h4, h5, h6 { break-after: avoid-page; break-inside: avoid; orphans: 4; }
p { orphans: 4; }
h1 { font-size: 2rem; }
h2 { font-size: 1.8rem; }
h3 { font-size: 1.6rem; }
h4 { font-size: 1.4rem; }
h5 { font-size: 1.2rem; }
h6 { font-size: 1rem; }
.md-math-block, .md-rawblock, h1, h2, h3, h4, h5, h6, p { margin-top: 1rem; margin-bottom: 1rem; }
.hidden { display: none; }
.md-blockmeta { color: rgb(204, 204, 204); font-weight: 700; font-style: italic; }
a { cursor: pointer; }
sup.md-footnote { padding: 2px 4px; background-color: rgba(238, 238, 238, 0.7); color: rgb(85, 85, 85); border-radius: 4px; cursor: pointer; }
sup.md-footnote a, sup.md-footnote a:hover { color: inherit; text-transform: inherit; text-decoration: inherit; }
#write input[type="checkbox"] { cursor: pointer; width: inherit; height: inherit; }
figure { overflow-x: auto; margin: 1.2em 0px; max-width: calc(100% + 16px); padding: 0px; }
figure > table { margin: 0px; }
tr { break-inside: avoid; break-after: auto; }
thead { display: table-header-group; }
table { border-collapse: collapse; border-spacing: 0px; width: 100%; overflow: auto; break-inside: auto; text-align: left; }
table.md-table td { min-width: 32px; }
.CodeMirror-gutters { border-right: 0px; background-color: inherit; }
.CodeMirror-linenumber { user-select: none; }
.CodeMirror { text-align: left; }
.CodeMirror-placeholder { opacity: 0.3; }
.CodeMirror pre { padding: 0px 4px; }
.CodeMirror-lines { padding: 0px; }
div.hr:focus { cursor: none; }
#write pre { white-space: pre-wrap; }
#write.fences-no-line-wrapping pre { white-space: pre; }
#write pre.ty-contain-cm { white-space: normal; }
.CodeMirror-gutters { margin-right: 4px; }
.md-fences { font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; overflow: visible; white-space: pre; background: inherit; position: relative !important; }
.md-diagram-panel { width: 100%; margin-top: 10px; text-align: center; padding-top: 0px; padding-bottom: 8px; overflow-x: auto; }
#write .md-fences.mock-cm { white-space: pre-wrap; }
.md-fences.md-fences-with-lineno { padding-left: 0px; }
#write.fences-no-line-wrapping .md-fences.mock-cm { white-space: pre; overflow-x: auto; }
.md-fences.mock-cm.md-fences-with-lineno { padding-left: 8px; }
.CodeMirror-line, twitterwidget { break-inside: avoid; }
.footnotes { opacity: 0.8; font-size: 0.9rem; margin-top: 1em; margin-bottom: 1em; }
.footnotes + .footnotes { margin-top: 0px; }
.md-reset { margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: top; background: 0px 0px; text-decoration: none; text-shadow: none; float: none; position: static; width: auto; height: auto; white-space: nowrap; cursor: inherit; -webkit-tap-highlight-color: transparent; line-height: normal; font-weight: 400; text-align: left; box-sizing: content-box; direction: ltr; }
li div { padding-top: 0px; }
blockquote { margin: 1rem 0px; }
li .mathjax-block, li p { margin: 0.5rem 0px; }
li blockquote { margin: 1rem 0px; }
li { margin: 0px; position: relative; }
blockquote > :last-child { margin-bottom: 0px; }
blockquote > :first-child, li > :first-child { margin-top: 0px; }
.footnotes-area { color: rgb(136, 136, 136); margin-top: 0.714rem; padding-bottom: 0.143rem; white-space: normal; }
#write .footnote-line { white-space: pre-wrap; }
@media print {
  body, html { border: 1px solid transparent; height: 99%; break-after: avoid; break-before: avoid; font-variant-ligatures: no-common-ligatures; }
  #write { margin-top: 0px; padding-top: 0px; border-color: transparent !important; }
  .typora-export * { -webkit-print-color-adjust: exact; }
  .typora-export #write { break-after: avoid; }
  .typora-export #write::after { height: 0px; }
  .is-mac table { break-inside: avoid; }
}
.footnote-line { margin-top: 0.714em; font-size: 0.7em; }
a img, img a { cursor: pointer; }
pre.md-meta-block { font-size: 0.8rem; min-height: 0.8rem; white-space: pre-wrap; background: rgb(204, 204, 204); display: block; overflow-x: hidden; }
p > .md-image:only-child:not(.md-img-error) img, p > img:only-child { display: block; margin: auto; }
#write.first-line-indent p > .md-image:only-child:not(.md-img-error) img { left: -2em; position: relative; }
p > .md-image:only-child { display: inline-block; width: 100%; }
#write .MathJax_Display { margin: 0.8em 0px 0px; }
.md-math-block { width: 100%; }
.md-math-block:not(:empty)::after { display: none; }
.MathJax_ref { fill: currentcolor; }
[contenteditable="true"]:active, [contenteditable="true"]:focus, [contenteditable="false"]:active, [contenteditable="false"]:focus { outline: 0px; box-shadow: none; }
.md-task-list-item { position: relative; list-style-type: none; }
.task-list-item.md-task-list-item { padding-left: 0px; }
.md-task-list-item > input { position: absolute; top: 0px; left: 0px; margin-left: -1.2em; margin-top: calc(1em - 10px); border: none; }
.math { font-size: 1rem; }
.md-toc { min-height: 3.58rem; position: relative; font-size: 0.9rem; border-radius: 10px; }
.md-toc-content { position: relative; margin-left: 0px; }
.md-toc-content::after, .md-toc::after { display: none; }
.md-toc-item { display: block; color: rgb(65, 131, 196); }
.md-toc-item a { text-decoration: none; }
.md-toc-inner:hover { text-decoration: underline; }
.md-toc-inner { display: inline-block; cursor: pointer; }
.md-toc-h1 .md-toc-inner { margin-left: 0px; font-weight: 700; }
.md-toc-h2 .md-toc-inner { margin-left: 2em; }
.md-toc-h3 .md-toc-inner { margin-left: 4em; }
.md-toc-h4 .md-toc-inner { margin-left: 6em; }
.md-toc-h5 .md-toc-inner { margin-left: 8em; }
.md-toc-h6 .md-toc-inner { margin-left: 10em; }
@media screen and (max-width: 48em) {
  .md-toc-h3 .md-toc-inner { margin-left: 3.5em; }
  .md-toc-h4 .md-toc-inner { margin-left: 5em; }
  .md-toc-h5 .md-toc-inner { margin-left: 6.5em; }
  .md-toc-h6 .md-toc-inner { margin-left: 8em; }
}
a.md-toc-inner { font-size: inherit; font-style: inherit; font-weight: inherit; line-height: inherit; }
.footnote-line a:not(.reversefootnote) { color: inherit; }
.md-attr { display: none; }
.md-fn-count::after { content: "."; }
code, pre, samp, tt { font-family: var(--monospace); }
kbd { margin: 0px 0.1em; padding: 0.1em 0.6em; font-size: 0.8em; color: rgb(36, 39, 41); background: rgb(255, 255, 255); border: 1px solid rgb(173, 179, 185); border-radius: 3px; box-shadow: rgba(12, 13, 14, 0.2) 0px 1px 0px, rgb(255, 255, 255) 0px 0px 0px 2px inset; white-space: nowrap; vertical-align: middle; }
.md-comment { color: rgb(162, 127, 3); opacity: 0.8; font-family: var(--monospace); }
code { text-align: left; vertical-align: initial; }
a.md-print-anchor { white-space: pre !important; border-width: initial !important; border-style: none !important; border-color: initial !important; display: inline-block !important; position: absolute !important; width: 1px !important; right: 0px !important; outline: 0px !important; background: 0px 0px !important; text-decoration: initial !important; text-shadow: initial !important; }
.md-inline-math .MathJax_SVG .noError { display: none !important; }
.html-for-mac .inline-math-svg .MathJax_SVG { vertical-align: 0.2px; }
.md-math-block .MathJax_SVG_Display { text-align: center; margin: 0px; position: relative; text-indent: 0px; max-width: none; max-height: none; min-height: 0px; min-width: 100%; width: auto; overflow-y: hidden; display: block !important; }
.MathJax_SVG_Display, .md-inline-math .MathJax_SVG_Display { width: auto; margin: inherit; display: inline-block !important; }
.MathJax_SVG .MJX-monospace { font-family: var(--monospace); }
.MathJax_SVG .MJX-sans-serif { font-family: sans-serif; }
.MathJax_SVG { display: inline; font-style: normal; font-weight: 400; line-height: normal; zoom: 90%; text-indent: 0px; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; overflow-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px; }
.MathJax_SVG * { transition: none 0s ease 0s; }
.MathJax_SVG_Display svg { vertical-align: middle !important; margin-bottom: 0px !important; margin-top: 0px !important; }
.os-windows.monocolor-emoji .md-emoji { font-family: "Segoe UI Symbol", sans-serif; }
.md-diagram-panel > svg { max-width: 100%; }
[lang="flow"] svg, [lang="mermaid"] svg { max-width: 100%; height: auto; }
[lang="mermaid"] .node text { font-size: 1rem; }
table tr th { border-bottom: 0px; }
video { max-width: 100%; display: block; margin: 0px auto; }
iframe { max-width: 100%; width: 100%; border: none; }
.highlight td, .highlight tr { border: 0px; }
mark { background: rgb(255, 255, 0); color: rgb(0, 0, 0); }
.md-html-inline .md-plain, .md-html-inline strong, mark .md-inline-math, mark strong { color: inherit; }
mark .md-meta { color: rgb(0, 0, 0); opacity: 0.3 !important; }
@media print {
  .typora-export h1, .typora-export h2, .typora-export h3, .typora-export h4, .typora-export h5, .typora-export h6 { break-inside: avoid; }
}
.md-diagram-panel .messageText { stroke: none !important; }
.md-diagram-panel .start-state { fill: var(--node-fill); }
.md-diagram-panel .edgeLabel rect { opacity: 1 !important; }
.md-require-zoom-fix foreignobject { font-size: var(--mermaid-font-zoom); }


:root {
    --side-bar-bg-color: #fafafa;
    --control-text-color: #777;
}

@include-when-export url(https://fonts.loli.net/css?family=Open+Sans:400italic,700italic,700,400&subset=latin,latin-ext);

/* open-sans-regular - latin-ext_latin */
  /* open-sans-italic - latin-ext_latin */
    /* open-sans-700 - latin-ext_latin */
    /* open-sans-700italic - latin-ext_latin */
  html {
    font-size: 16px;
}

body {
    font-family: "Fira Code", "Open Sans","Clear Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
    color: rgb(51, 51, 51);
    line-height: 1.6;
}

#write {
    max-width: 860px;
  	margin: 0 auto;
  	padding: 30px;
    padding-bottom: 100px;
}

@media only screen and (min-width: 1400px) {
	#write {
		max-width: 1024px;
	}
}

@media only screen and (min-width: 1800px) {
	#write {
		max-width: 1200px;
	}
}

#write > ul:first-child,
#write > ol:first-child{
    margin-top: 30px;
}

a {
    color: #4183C4;
}
h1,
h2,
h3,
h4,
h5,
h6 {
    position: relative;
    margin-top: 1rem;
    margin-bottom: 1rem;
    font-weight: bold;
    line-height: 1.4;
    cursor: text;
}
h1:hover a.anchor,
h2:hover a.anchor,
h3:hover a.anchor,
h4:hover a.anchor,
h5:hover a.anchor,
h6:hover a.anchor {
    text-decoration: none;
}
h1 tt,
h1 code {
    font-size: inherit;
}
h2 tt,
h2 code {
    font-size: inherit;
}
h3 tt,
h3 code {
    font-size: inherit;
}
h4 tt,
h4 code {
    font-size: inherit;
}
h5 tt,
h5 code {
    font-size: inherit;
}
h6 tt,
h6 code {
    font-size: inherit;
}
h1 {
    font-size: 2.25em;
    line-height: 1.2;
    border-bottom: 1px solid #eee;
}
h2 {
    font-size: 1.75em;
    line-height: 1.225;
    border-bottom: 1px solid #eee;
}

/*@media print {
    .typora-export h1,
    .typora-export h2 {
        border-bottom: none;
        padding-bottom: initial;
    }

    .typora-export h1::after,
    .typora-export h2::after {
        content: "";
        display: block;
        height: 100px;
        margin-top: -96px;
        border-top: 1px solid #eee;
    }
}*/

h3 {
    font-size: 1.5em;
    line-height: 1.43;
}
h4 {
    font-size: 1.25em;
}
h5 {
    font-size: 1em;
}
h6 {
   font-size: 1em;
    color: #777;
}
p,
blockquote,
ul,
ol,
dl,
table{
    margin: 0.8em 0;
}
li>ol,
li>ul {
    margin: 0 0;
}
hr {
    height: 2px;
    padding: 0;
    margin: 16px 0;
    background-color: #e7e7e7;
    border: 0 none;
    overflow: hidden;
    box-sizing: content-box;
}

li p.first {
    display: inline-block;
}
ul,
ol {
    padding-left: 30px;
}
ul:first-child,
ol:first-child {
    margin-top: 0;
}
ul:last-child,
ol:last-child {
    margin-bottom: 0;
}
blockquote {
    border-left: 4px solid #dfe2e5;
    padding: 0 15px;
    color: #777777;
}
blockquote blockquote {
    padding-right: 0;
}
table {
    padding: 0;
    word-break: initial;
}
table tr {
    border-top: 1px solid #dfe2e5;
    margin: 0;
    padding: 0;
}
table tr:nth-child(2n),
thead {
    background-color: #f8f8f8;
}
table th {
    font-weight: bold;
    border: 1px solid #dfe2e5;
    border-bottom: 0;
    margin: 0;
    padding: 6px 13px;
}
table td {
    border: 1px solid #dfe2e5;
    margin: 0;
    padding: 6px 13px;
}
table th:first-child,
table td:first-child {
    margin-top: 0;
}
table th:last-child,
table td:last-child {
    margin-bottom: 0;
}

.CodeMirror-lines {
    padding-left: 4px;
}

.code-tooltip {
    box-shadow: 0 1px 1px 0 rgba(0,28,36,.3);
    border-top: 1px solid #eef2f2;
}

.md-fences,
code,
tt {
    border: 1px solid #e7eaed;
    background-color: #f8f8f8;
    border-radius: 3px;
    padding: 0;
    padding: 2px 4px 0px 4px;
    font-size: 0.9em;
}

code {
    background-color: #f3f4f4;
    padding: 0 2px 0 2px;
}

.md-fences {
    margin-bottom: 15px;
    margin-top: 15px;
    padding-top: 8px;
    padding-bottom: 6px;
}


.md-task-list-item > input {
  margin-left: -1.3em;
}

@media print {
    html {
        font-size: 13px;
    }
    table,
    pre {
        page-break-inside: avoid;
    }
    pre {
        word-wrap: break-word;
    }
}

.md-fences {
	background-color: #f8f8f8;
}
#write pre.md-meta-block {
	padding: 1rem;
    font-size: 85%;
    line-height: 1.45;
    background-color: #f7f7f7;
    border: 0;
    border-radius: 3px;
    color: #777777;
    margin-top: 0 !important;
}

.mathjax-block>.code-tooltip {
	bottom: .375rem;
}

.md-mathjax-midline {
    background: #fafafa;
}

#write>h3.md-focus:before{
	left: -1.5625rem;
	top: .375rem;
}
#write>h4.md-focus:before{
	left: -1.5625rem;
	top: .285714286rem;
}
#write>h5.md-focus:before{
	left: -1.5625rem;
	top: .285714286rem;
}
#write>h6.md-focus:before{
	left: -1.5625rem;
	top: .285714286rem;
}
.md-image>.md-meta {
    /*border: 1px solid #ddd;*/
    border-radius: 3px;
    padding: 2px 0px 0px 4px;
    font-size: 0.9em;
    color: inherit;
}

.md-tag {
    color: #a7a7a7;
    opacity: 1;
}

.md-toc {
    margin-top:20px;
    padding-bottom:20px;
}

.sidebar-tabs {
    border-bottom: none;
}

#typora-quick-open {
    border: 1px solid #ddd;
    background-color: #f8f8f8;
}

#typora-quick-open-item {
    background-color: #FAFAFA;
    border-color: #FEFEFE #e5e5e5 #e5e5e5 #eee;
    border-style: solid;
    border-width: 1px;
}

/** focus mode */
.on-focus-mode blockquote {
    border-left-color: rgba(85, 85, 85, 0.12);
}

header, .context-menu, .megamenu-content, footer{
    font-family: "Segoe UI", "Arial", sans-serif;
}

.file-node-content:hover .file-node-icon,
.file-node-content:hover .file-node-open-state{
    visibility: visible;
}

.mac-seamless-mode #typora-sidebar {
    background-color: #fafafa;
    background-color: var(--side-bar-bg-color);
}

.md-lang {
    color: #b4654d;
}

.html-for-mac .context-menu {
    --item-hover-bg-color: #E6F0FE;
}

#md-notification .btn {
    border: 0;
}

.dropdown-menu .divider {
    border-color: #e5e5e5;
}

.ty-preferences .window-content {
    background-color: #fafafa;
}

.ty-preferences .nav-group-item.active {
    color: white;
    background: #999;
}



</style>
</head>
<body class='typora-export'>
<div id='write'  class=''><div style="display: flex; align-items: center;"><svg t="1613646879540" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7636" width="30" height="36"><path d="M869.52 223.52c12.32 0 22.34 10.02 22.34 22.34v536.27c0 12.32-10.02 22.34-22.34 22.34H154.48c-12.32 0-22.34-10.02-22.34-22.34V245.86c0-12.32 10.02-22.34 22.34-22.34h715.04m0-67.04H154.48c-49.36 0-89.38 40.02-89.38 89.38v536.27c0 49.36 40.02 89.38 89.38 89.38h715.03c49.36 0 89.38-40.02 89.38-89.38V245.86c0.01-49.36-40.01-89.38-89.37-89.38z" fill="#0081FF" p-id="7637"></path><path d="M377.93 382.41c28.75 0 52.14 23.39 52.14 52.14s-23.39 52.14-52.14 52.14-52.14-23.39-52.14-52.14 23.39-52.14 52.14-52.14m0-67.03c-65.82 0-119.17 53.36-119.17 119.17 0 65.82 53.36 119.17 119.17 119.17S497.1 500.37 497.1 434.55s-53.35-119.17-119.17-119.17z" fill="#0081FF" p-id="7638"></path><path d="M377.93 561.17c52.19 0 96.13 35.97 108.35 84.41h-216.7c12.22-48.44 56.17-84.41 108.35-84.41m0-67.03c-98.73 0-178.76 80.03-178.76 178.76 0 13.7 1.86 26.91 4.78 39.73h347.96c2.92-12.82 4.78-26.02 4.78-39.73 0-98.73-80.03-178.76-178.76-178.76zM735.45 391.1H654.2c-16.82 0-30.47-15.01-30.47-33.52 0-18.5 13.65-33.52 30.47-33.52h81.25c16.82 0 30.47 15.01 30.47 33.52 0 18.51-13.65 33.52-30.47 33.52zM816.7 547.52H654.19c-16.82 0-30.47-15.01-30.47-33.52 0-18.5 13.65-33.52 30.47-33.52H816.7c16.82 0 30.47 15.01 30.47 33.52 0 18.5-13.65 33.52-30.47 33.52zM816.7 703.93H654.19c-16.82 0-30.47-15.01-30.47-33.52 0-18.5 13.65-33.52 30.47-33.52H816.7c16.82 0 30.47 15.01 30.47 33.52 0 18.51-13.65 33.52-30.47 33.52z" fill="#0081FF" p-id="7639"></path></svg> <h3 style="padding-left: 5px"> <span>周文波-简历</span> </h3></div><blockquote><p><span>复制链接 </span><a href='https://baloneo.gitee.io/baloneo.gitee.io/resume.html' target='_blank' class='url'>https://baloneo.gitee.io/baloneo.gitee.io/resume.html</a><span> 到浏览器打开阅读效果更佳</span></p></blockquote><p><span class='md-image'><img src="https://file.alonebo.top/mywechat.jpg" style="width: 200px; height: 200px; float:left" ></span></p><div style="display: flex; align-items: center;"><svg t="1613631437096" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2223" width="20" height="20"><path d="M851.083636 684.683636c-113.105455-90.763636-145.92-46.545455-195.258181 3.956364-37.003636 37.003636-127.301818-39.098182-203.403637-116.363636s-154.065455-170.821818-116.363636-203.869091c51.2-51.432727 94.487273-82.152727 3.956363-195.490909s-151.970909-26.763636-201.30909 23.272727c-58.181818 56.087273-4.887273 269.265455 206.894545 482.210909s425.425455 265.541818 482.909091 207.825455c49.338182-49.338182 137.774545-111.010909 23.272727-201.774546z" p-id="2224" "=""></path></svg> <p style="padding-left: 5px"> <span>  13168103370</span> </p></div><div style="display: flex; align-items: center;"><svg t="1613632512747" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1375" width="20" height="20"><path d="M149.6 171.8h691.9c47.2 0 85.9 37.7 86.5 83.9L495.7 493 63.5 256c0.4-46.4 38.8-84.2 86.1-84.2z m-86.1 175l-0.4 419.6c0 46.7 38.9 84.9 86.5 84.9h691.9c47.6 0 86.5-38.2 86.5-84.9V346.6L505.9 572.8c-6.5 3.5-14.3 3.5-20.7 0l-421.7-226z" p-id="1376"></path></svg> <p style="padding-left: 5px"> <span>  aloneobo.zhou@gmail.com</span> </p></div><div style="display: flex; align-items: center;"><svg t="1613632732673" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2114" width="20" height="20"><path d="M512 42.666667A464.64 464.64 0 0 0 42.666667 502.186667 460.373333 460.373333 0 0 0 363.52 938.666667c23.466667 4.266667 32-9.813333 32-22.186667v-78.08c-130.56 27.733333-158.293333-61.44-158.293333-61.44a122.026667 122.026667 0 0 0-52.053334-67.413333c-42.666667-28.16 3.413333-27.733333 3.413334-27.733334a98.56 98.56 0 0 1 71.68 47.36 101.12 101.12 0 0 0 136.533333 37.973334 99.413333 99.413333 0 0 1 29.866667-61.44c-104.106667-11.52-213.333333-50.773333-213.333334-226.986667a177.066667 177.066667 0 0 1 47.36-124.16 161.28 161.28 0 0 1 4.693334-121.173333s39.68-12.373333 128 46.933333a455.68 455.68 0 0 1 234.666666 0c89.6-59.306667 128-46.933333 128-46.933333a161.28 161.28 0 0 1 4.693334 121.173333A177.066667 177.066667 0 0 1 810.666667 477.866667c0 176.64-110.08 215.466667-213.333334 226.986666a106.666667 106.666667 0 0 1 32 85.333334v125.866666c0 14.933333 8.533333 26.88 32 22.186667A460.8 460.8 0 0 0 981.333333 502.186667 464.64 464.64 0 0 0 512 42.666667" p-id="2115"></path></svg> <p style="margin-left: 5px"> <span>  <a href="https://github.com/Baloneo">github.com/Baloneo</a>  </span> </p></div><div style="display: flex; align-items: center;"><svg t="1613632992355" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6596" width="20" height="20"><path d="M440.6656 588.90773333a32.53333333 32.53333333 0 0 1-23.08266667-9.57333333c-76.34986667-76.34986667-76.34986667-200.63253333 0-277.00266667l138.272-138.25173333c36.99093333-37.01226667 86.18453333-57.42293333 138.51093334-57.42293333 52.3072 0 101.48053333 20.41066667 138.51306666 57.42293333 76.3712 76.352 76.3712 200.63253333 0 277.00266667l-69.2864 69.2672c-12.74453333 12.74453333-33.3984 12.74453333-46.12266666 0-12.78613333-12.76586667-12.78613333-33.41866667 0-46.16426667l69.2448-69.24693333c50.92053333-50.92053333 50.92053333-133.77493333 0-184.6752-49.37493333-49.376-135.34186667-49.376-184.69546667 0l-138.272 138.21013333c-50.8992 50.92053333-50.8992 133.79626667 0 184.71573333 12.74773333 12.74453333 12.74773333 33.3984 0 46.144-6.36266667 6.384-14.7328 9.5744-23.0816 9.5744" fill="#000000" p-id="6597"></path><path d="M302.57386667 890.11733333c-50.11626667 0-100.31573333-19.06666667-138.47146667-57.26293333-37.00906667-37.01226667-57.40266667-86.18666667-57.40266667-138.51306667s20.39253333-101.51893333 57.40266667-138.49173333l69.22666667-69.2448c12.76586667-12.76586667 33.44-12.76586667 46.18453333 0 12.74453333 12.74453333 12.74453333 33.3984 0 46.144l-69.24693333 69.24693333c-24.66773333 24.68586667-38.25493333 57.4432-38.25493334 92.34666667 0 34.864 13.5872 67.6608 38.25493334 92.36906667 50.8608 50.8608 133.73653333 50.8608 184.67733333 0l138.2496-138.272c50.9216-50.92053333 50.9216-133.75466667 0-184.656-12.74453333-12.76586667-12.74453333-33.43786667 0-46.1824 12.74666667-12.76586667 33.3984-12.76586667 46.16426667 0 76.352 76.34986667 76.352 200.63253333 0 276.9824l-138.22933334 138.272c-38.2176 38.1952-88.39573333 57.26186667-138.55466666 57.26186666" fill="#000000" p-id="6598"></path></svg> <p style="margin-left: 8px">  <a href="http://alonebo.top"> alonebo.top</a></p></div><hr><div style="display: flex; align-items: center;"><svg t="1613646841239" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6966" width="30" height="30"><path d="M930.926254 408.920354v-5.663717a37.758112 37.758112 0 0 0-15.858407-28.318584l-47.952803-33.227139 29.451328-51.728613a37.758112 37.758112 0 0 0 1.887905-32.471977 425.533923 425.533923 0 0 0-139.705014-176.707964 37.758112 37.758112 0 0 0-32.849558-5.286136l-55.882006 17.368732L648.495575 37.758112a37.758112 37.758112 0 0 0-24.165192-21.899705 412.696165 412.696165 0 0 0-224.660766 0A37.758112 37.758112 0 0 0 375.504425 37.758112l-21.522124 55.126844L298.100295 75.516224a37.758112 37.758112 0 0 0-32.471976 5.286136A423.646018 423.646018 0 0 0 125.545723 257.510324a37.758112 37.758112 0 0 0 1.887905 32.471977l29.451328 51.728613-47.952803 33.227139a37.758112 37.758112 0 0 0-15.480826 27.941003v19.634218a424.778761 424.778761 0 0 0 50.595871 201.628319 37.758112 37.758112 0 0 0 26.808259 18.879056l57.392331 8.684366-5.286136 58.147492a37.758112 37.758112 0 0 0 12.082596 29.828909 415.339233 415.339233 0 0 0 203.516224 98.926254h6.418879A37.758112 37.758112 0 0 0 469.899705 830.678466l41.911504-37.758112 42.289086 37.758112a37.758112 37.758112 0 0 0 30.961652 9.439528 415.339233 415.339233 0 0 0 203.516224-98.926254 34.737463 34.737463 0 0 0 12.082596-29.828908l-4.153392-58.147493 57.769911-11.327433a37.758112 37.758112 0 0 0 26.430679-18.879056 425.156342 425.156342 0 0 0 50.973451-201.628319c-0.377581-3.39823-0.377581-6.041298-0.755162-12.460177z m-419.115045 211.067847a200.873156 200.873156 0 1 1 200.873157-200.495576 200.495575 200.495575 0 0 1-200.873157 200.495576z" fill="#4E8CEE" p-id="6967"></path><path d="M797.262537 782.725664a445.168142 445.168142 0 0 1-203.138643 93.262537 37.758112 37.758112 0 0 1-12.837758 0l31.716814 120.448377a40.778761 40.778761 0 0 0 30.961652 26.80826h7.174041a41.533923 41.533923 0 0 0 30.961652-14.348083L739.115044 943.952802l106.477876 26.053098a37.758112 37.758112 0 0 0 42.666667-13.970502 40.778761 40.778761 0 0 0 0-46.820059zM443.846608 876.743363h-6.796461a447.811209 447.811209 0 0 1-209.557522-98.171092l-92.884955 132.908555a37.758112 37.758112 0 0 0 43.044247 58.902655l106.100295-26.430679 56.637169 65.321534a41.156342 41.156342 0 0 0 30.961651 14.725664h8.306785a40.40118 40.40118 0 0 0 30.20649-28.318584l35.115044-118.182891z" fill="#A6C5F6" p-id="6968"></path></svg> <h3 style="padding-left: 5px"> <span>技能简介</span> </h3></div><ul><li><span>男，1998 年出生，23岁</span></li><li><span>求职意向： Python Web、Go Web、Vue.js+Python全栈、物联网IoT开发</span></li><li><span>工作经验：2.5年</span></li><li><span>期望薪资：面议</span></li></ul><p><span>   熟练使用Python，熟练使用Flask、SQLAlchemy、Django、MongoEngine、Vue.js进行Web开发，会使用Go、JavaScript、Java、Shell等语</span></p><p><span>言。能熟练的使用 Linux（Ubuntu/LinutMint/Manjaro）进行日常工作开发，计算机基础知识扎实。了解微服务开发、可持续集成、Linux 编</span></p><p><span>程、GTK、Flutter等新技术。能够独立搭建运维、后端、前端代码框架。能够看懂英文</span></p><p><span>技术文档。动手解决问题能力强，热爱编程，喜欢使用新兴的技术。</span></p><div style="display: flex; align-items: center;"><svg t="1613646767262" class="icon" viewBox="0 0 1368 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6191" width="30" height="30"><path d="M1308.738184 325.590292V543.186005l52.795332 60.196547L1260.383581 691.2103l-92.268477-87.827748L1223.870922 543.186005V361.609537c-298.515661 121.873336-379.435609 159.372824-444.072885 188.977683a208.714256 208.714256 0 0 1-179.602811 4.934143C533.090879 531.344062 235.562046 418.352183 80.136537 345.820279c-103.617006-49.341432-110.031393-79.933119 0-121.873336 148.024295-55.755818 374.501466-143.583566 502.789188-191.938169 75.985805-31.578516 115.952364-46.87436 185.523783-12.335358 124.340408 49.341432 394.731453 156.412338 534.367704 214.141813 122.860165 52.795332 40.459974 70.558247 5.920972 91.775063z" fill="#4E8CEE" p-id="6192"></path><path d="M792.626809 641.868868c72.03849-29.604859 169.734525-78.452876 275.818603-123.353579v361.17928A549.663548 549.663548 0 0 1 690.98346 1023.771549a581.242065 581.242065 0 0 1-400.15901-144.570394V543.186005c81.906776 33.058759 174.175254 61.183375 285.193475 98.682863a290.127618 290.127618 0 0 0 218.089127 0z" fill="#A6C5F6" p-id="6193"></path></svg> <h3 style="padding-left: 9px">教育经历</h3></div><p><span>全日制专科，河源职业技术学院，嵌入式技术专业，2016 ~ 2019</span></p><div style="display: flex; align-items: center;"><svg t="1613646710306" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4505" width="34" height="34"><path d="M-194.9905014-194.9905014m706.9905014 0l0 0q706.9905014 0 706.9905014 706.9905014l0 0q0 706.9905014-706.9905014 706.9905014l0 0q-706.9905014 0-706.9905014-706.9905014l0 0q0-706.9905014 706.9905014-706.9905014Z" fill="#FFFFFF" p-id="4506"></path><path d="M170.666667 333.748148h682.666666v390.637037H170.666667V333.748148z" fill="#4CA7FC" p-id="4507"></path><path d="M813.75763 229.239467H210.24237v455.535881h603.51526V229.239467zM170.666667 189.62963v534.755555h682.666666V189.62963H170.666667z" fill="#4CA7FC" p-id="4508"></path><path d="M208.592593 227.555556h606.814814v106.192592H208.592593V227.555556z" fill="#FFFFFF" p-id="4509"></path><path d="M678.874074 879.881481H345.125926v-37.925925h333.748148v37.925925z" fill="#4CA7FC" p-id="4510"></path><path d="M379.259259 476.596148a158.42797 158.42797 0 0 0 57.662578 51.241719A161.310341 161.310341 0 0 0 512.341333 546.133333a161.253452 161.253452 0 0 0 75.241245-19.008474A158.32557 158.32557 0 0 0 644.740741 475.344593L607.546785 451.318519a114.157037 114.157037 0 0 1-41.195141 37.319111 116.178489 116.178489 0 0 1-54.222696 13.695051 116.186074 116.186074 0 0 1-54.355437-13.183051 114.176 114.176 0 0 1-41.555437-36.928474L379.259259 476.596148z" fill="#FFFFFF" p-id="4511"></path></svg> <h3 style="padding-left: 5px"> <span>工作项目经验</span> </h3></div><h5><a name="广东雅达电子股份有限公司研发部⻔软件工程师实习助理）-2018暑假寒假）" class="md-header-anchor"></a><span>广东雅达电子股份有限公司，研发部⻔，软件工程师（实习/助理）。 2018（暑假、寒假）</span></h5><blockquote><p><span>主要负责 Android App 和 Zigbee数据采集开发</span></p></blockquote><p>&nbsp;</p><p><span>项目1：Android 平台智慧农业监控系统</span></p><ol start='' ><li><p><span>实现获取 Android 的串口数据 ,</span></p></li><li><p><span>实现通过 </span><strong><span>socket 得到 ZigBee 的传感器数据</span></strong></p></li><li><p><span>实现实时显示控制摄像头、继电器、各传感器信息</span></p><p>&nbsp;</p></li></ol><p><span>项目2：ZigBee 组网传感器器数据获取</span></p><ol start='' ><li><span>获取温度传感器等模拟量数据</span></li><li><span>通过组网 + 串口的方式给上层 WIFI 网关提供数据。</span></li></ol><p>&nbsp;</p><hr><h5><a name="广东国机智能电力科技有限公司软件部⻔python-工程师实习工作）-201901--202003" class="md-header-anchor"></a><span>广东国机智能电力科技有限公司，软件部⻔，Python 工程师（实习+工作）。 2019.01 ~ 2020.03 </span></h5><blockquote><p><span>主要负责开发 ROS 机器人的任务调度系统以及Python Web业务上的开发</span></p></blockquote><p>&nbsp;</p><p><span>项目1：维护Django框架的机器人任务控制管理系统</span></p><ol start='' ><li><p><span>使用了 Celery+RabbitMQ 执行并发任务</span></p></li><li><p><span>前端使用Vue.js+Element</span></p></li><li><p><span>维护更新一些项目上的Bug和客户的需求</span></p><p><span>    </span></p></li></ol><p><span>项目2：开发基于Python RQ的机器人任务调度系统，实现机器人定时任务下发处理、任务中断暂停、自动回桩充电等功能。（由于旧系统基于Celery进行任务调度，灵活和稳定欠缺）</span></p><ol start='' ><li><p><span>使用 Python RQ 库作为消息队列框架发布存储任务</span></p></li><li><p><span>使用 MongoDB 作为任务日志存储</span></p></li><li><p><span>使用 ZeroRPC 封装成 RPC 接口给其它应用服务调用</span></p></li><li><p><span>Ubuntu+Docker+Docker-Composer</span></p></li><li><p><span>Redis 实现进程间通信</span></p></li><li><p><span>利用Linux的进程信号等机制实现</span><strong><span>任务中断恢复</span></strong></p><p><span>    </span></p></li></ol><p><span>项目3：使用Python封装海康摄像头并提供Web服务</span></p><ol start='' ><li><span>实现通过 Python 的 ctypes 封装调用海康摄像头的 </span><strong><span>so 库</span></strong><span>文件</span></li><li><span>通过 Sanic 异步框架 + 进程池实现并发请求</span></li><li><span>封装视觉小组的图像识别训练后的模型，提供HTTP接口</span></li></ol><p>&nbsp;</p><hr><h5><a name="广州科通达信息科技有限公司软件部⻔python后端工程师-202003" class="md-header-anchor"></a><span>广州科通达信息科技有限公司，软件部⻔，Python后端工程师。 2020.03~?</span></h5><blockquote><p><span>后端框架设计搭建、微信小程序、开放平台开发、智能硬件云端开发、系统运维</span></p></blockquote><p>&nbsp;</p><p><span>项目1：智能臭氧消毒器APP、PC后端，基于EMQ X+Flask+MongoDB（MongoEngine）+MySQL的设备控制查看、设备多用户共享等功能</span></p><ol start='' ><li><p><span>开发微信登录、帐号登录、手机号登录、PC扫码登录</span></p></li><li><p><span>开发PC扫码支付功能，用于用户支付设备额外产生的费用</span></p></li><li><p><span>开发用户</span><strong><span>扫码绑定设备</span></strong><span>、用户分享设备、删除设备等设备管理功能</span></p></li><li><p><span>实现前端发送HTTP设备控制报文转发给指定设备从而实现设备通信控制</span></p></li><li><p><span>设备上传日志记录、用户控制记录查询、消杀统计、授权管理</span></p></li><li><p><span>Docker+Gunicorn+Docker Nginx实现</span><strong><span>不宕机</span></strong><span>更新</span></p></li><li><p><span>实现设备上线下线通知（极光推送）</span></p></li><li><p><a href='https://med.cotodo.com/' target='_blank' class='url'>https://med.cotodo.com/</a></p><p>&nbsp;</p></li></ol><p><span>项目2：基于Go、Gin的设备状态、日志、MQTT发布订阅权限检验 后端系统</span></p><ol start='' ><li><p><span>使用paho.mqtt.golang+mgo库订阅MQTT，处理设备上发的日志，存储到MongoDB</span></p></li><li><p><span>使用Gin搭建HTTP MQTT</span><strong><span>权限校验服务</span></strong><span>供EMQ X回调</span></p></li><li><p><span>使用明文+签名(asscess_key)的方式验证MQTT连接的密码，提高MQTT连接安全性</span></p><p>&nbsp;</p></li></ol><p><span>项目3：科通达后台管理系统，实现完整的设备管理、APP版本管理、用户管理等</span></p><ol start='' ><li><p><span>七牛云文件管理</span></p></li><li><p><span>各种增删改查的表单管理</span></p></li><li><p><a href='https://pangu.cotodo.com/' target='_blank' class='url'>https://pangu.cotodo.com/</a></p><p><span>  </span></p></li></ol><p><span>项目4：企业微信小程序下的智能电箱后端</span></p><ol start='' ><li><span>实现小程序的登陆、用户身份识别</span></li><li><span>实现</span><strong><span>企业微信智能硬件</span></strong><span>直接扫码添加、删除电箱</span></li><li><span>实现企业微信小程序定时推送消息功能（Python RQ）</span></li></ol><p>&nbsp;</p><div style="display: flex; align-items: center;"><svg t="1613646649493" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3589" width="28" height="28"><path d="M512 0C229.283787 0 0.142041 234.942803 0.142041 524.867683c0 231.829001 146.647305 428.553077 350.068189 497.952484 25.592898 4.819996 34.976961-11.38884 34.976961-25.294314 0-12.45521-0.469203-45.470049-0.725133-89.276559-142.381822 31.735193-172.453477-70.380469-172.453477-70.380469-23.246882-60.569859-56.816233-76.693384-56.816234-76.693385-46.493765-32.58829 3.540351-31.948468 3.540351-31.948467 51.356415 3.71097 78.356923 54.086324 78.356923 54.086324 45.683323 80.19108 119.817417 57.072162 148.993321 43.593236 4.649376-33.91059 17.915029-57.029508 32.50298-70.167195-113.675122-13.222997-233.151301-58.223843-233.1513-259.341366 0-57.285437 19.919806-104.163095 52.678715-140.846248-5.246544-13.265652-22.820334-66.626844 4.990615-138.884127 0 0 42.996069-14.076094 140.760939 53.787741 40.863327-11.644769 84.627183-17.445825 128.177764-17.6591 43.465272 0.213274 87.271782 6.014331 128.135109 17.6591 97.679561-67.906489 140.59032-53.787741 140.59032-53.787741 27.938914 72.257282 10.407779 125.618474 5.118579 138.884127 32.844219 36.683154 52.593405 83.560812 52.593405 140.846248 0 201.586726-119.646798 245.990404-233.663158 258.957473 18.341577 16.208835 34.721032 48.199958 34.721032 97.210357 0 70.167195-0.639822 126.7275-0.639823 143.960051 0 14.033439 9.213443 30.370239 35.190235 25.209005 203.250265-69.527373 349.769606-266.123484 349.769605-497.867175C1023.857959 234.942803 794.673558 0 512 0" fill="#3E75C3" p-id="3590"></path></svg> <h3 style="padding-left: 5px"> <span>个人开源项目</span> </h3></div><p><span class='md-image'><img src="https://file.alonebo.top/resume_github01.png" style="float: left"/></span></p><p>&nbsp;</p><p><span class='md-image'><img src="https://camo.githubusercontent.com/17a35c80c5f1f26656bbcac23d86669f07adf7016099a4abbb90ee4722e9c0cf/68747470733a2f2f6769746875622d726561646d652d73746174732e76657263656c2e6170702f6170692f746f702d6c616e67732f3f757365726e616d653d42616c6f6e656f266c61796f75743d636f6d706163742662675f636f6c6f723d30443131313726746578745f636f6c6f723d464646464646266c616e67735f636f756e743d313026686964655f626f726465723d74727565" style="float:left"/></span></p><p>&nbsp;</p><ul><li><p><span>项目1：基于Vue.js、Flask、MQTT、ESP8266 的物联网监控系统</span></p><p><span>前端：前端主要使用 Vue.js 和 MQTT.js，基于 Materialize 实现了 Web ⻚面的响应式布局,通过MQTT.js 实时获取传感器数据。</span></p><p><span>后端：后端主要使用 Flask ,提供一些简单的接口。</span></p><p><span>网关：网关主要功能是将单片机的数据转发处理给 MQTT，通过 Select IO 多路复用实现从多个 TCP Client 中获取数据</span></p><ol start='' ><li><span>实现传感器数据在前端的实时展示(通过 MQTT 推送)</span></li><li><span>实现继电器的实时控制</span></li><li><span>实现响应式布局，移动端一样可以有很好的体验</span></li><li><span>实现报警发送邮件功能</span></li><li><span>实现定时、条件触发控制设备</span></li></ol><p><a href='https://github.com/Baloneo/OrangeIoT-FrontEnd' target='_blank' class='url'>https://github.com/Baloneo/OrangeIoT-FrontEnd</a></p><p><span class='md-image'><img src="https://file.alonebo.top/resume_orange_iot.png" style="float: left; width: 600px; height: 300px"/></span></p></li></ul><p>&nbsp;</p><ul><li><p><span>项目2：LANC，局域网传输文件、聊天APP</span></p><p><span>在 Android 平台写一个基于 Socket 的可以实时聊天,显示局域网的联系人,传输文件, FTP 。</span>
<span>主要通过 TCP+UDP 协议实现客戶端之间的通信。</span></p><ol start='' ><li><span>实现传输文件</span></li><li><span>实现实时聊天</span></li><li><span>实现 FTP 服务器</span></li><li><span>自定义头像</span></li><li><span>消息通知栏显示</span></li><li><span>从 Bing 得到每日壁纸</span></li><li><span>删除聊天</span></li></ol><p><a href='https://github.com/Baloneo/LANC' target='_blank' class='url'>https://github.com/Baloneo/LANC</a></p><p><span class='md-image'><img src="https://file.alonebo.top/resume_lanc01.png" style="float: left; width: 400px; height: 240px" /></span></p><p><span class='md-image'><img src="https://file.alonebo.top/resume_lanc02.png" style="float: left; width: 400px; height: 640px" /></span></p><p>&nbsp;</p></li><li><p><span>项目3：实现Linux桌面平台下的网速、内存悬浮窗口程序</span></p><p><span>主要通过 C+Gtk+Cairo 实现 Linux 桌面平台的类似360悬浮小球的程序</span></p><ol start='' ><li><span>实现无窗边框、透明窗口</span></li><li><span>显示实时内存、网速信息</span></li><li><span>使用 Meson+Gtk构建</span></li><li><span>后台开机自启</span></li></ol><p><a href='https://github.com/Baloneo/network-ball-gtk' target='_blank' class='url'>https://github.com/Baloneo/network-ball-gtk</a></p><p><span class='md-image'><img src="https://file.alonebo.top/resume_ball.gif" style="float: left"/></span></p><p>&nbsp;</p></li></ul><ul><li><p><span>项目4：在 Linux 下的 SSR 科学上网的图形化界面实现</span></p><ol start='' ><li><span>解析SSR订阅地址得到JSON配置文件</span></li><li><span>通过 subprocess 托管运行 ssr-local 进程</span></li><li><span>能够在任务托盘后台运行</span></li></ol><p><a href='https://github.com/Baloneo/ssr-gtk' target='_blank' class='url'>https://github.com/Baloneo/ssr-gtk</a></p><p><span class='md-image'><img src="https://file.alonebo.top/resume_ssr-gtk.png" style="float: left; width:400px"/></span></p></li></ul><p>&nbsp;</p><ul><li><p><span>项目5：使用Go+Gtk实现Linux桌面平台下的网络调试助手</span></p><p><span>主要实现了TCP Server、TCP Client、UDP Server、UDP Client的图形化调试工具</span></p><ol start='' ><li><span>基于Go语言的Gtk的语言绑定实现</span></li><li><span>发送16进制字符、循环发送、发送本地文件、保存消息到本地文件</span></li></ol><p><a href='https://github.com/Baloneo/NetAssistant' target='_blank' class='url'>https://github.com/Baloneo/NetAssistant</a></p><p><span class='md-image'><img src="https://file.alonebo.top/resume_net.png" style="float: left; width:500px"/></span></p></li></ul><p>&nbsp;</p><ul><li><p><span>项目6：Flutter灯光控制APP</span></p><p><span>主要通过 Flutter 发送 UDP 数据包控制局域网下 NodeMCU 中的继电器。</span></p><ol start='' ><li><span>实现 IP 地址、控制报文等信息的自定义和存储</span></li><li><span>实现发送 UDP 报文控制继电器</span></li></ol><p><a href='https://github.com/Baloneo/Lighting-Control-App' target='_blank' class='url'>https://github.com/Baloneo/Lighting-Control-App</a></p><p><span class='md-image'><img src="https://file.alonebo.top/resume_light.webp" style="float: left; width: 300px; height: 540px"/></span></p></li></ul><p>&nbsp;</p><div style="display: flex; align-items: center;"><svg t="1613646603102" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2843" width="30" height="30"><path d="M141.568 139.008h736.3072V333.824H141.568z" fill="#DCEDFF" p-id="2844"></path><path d="M874.9056 97.28H152.6784c-25.3952 0-46.08 20.6848-46.08 46.08v730.3168c0 25.3952 20.6848 46.08 46.08 46.08h722.2272c25.3952 0 46.08-20.6848 46.08-46.08V143.36c0-25.3952-20.6848-46.08-46.08-46.08z m-5.12 51.2v159.744H157.7984V148.48h711.9872zM157.7984 868.5568V359.424h711.9872v509.1328H157.7984z" fill="#5B90EF" p-id="2845"></path><path d="M443.2384 783.88736l88.66304-360.0896 49.7152 12.24192-88.66816 360.0896zM653.7216 770.9184l-36.7104-35.6864 121.4976-125.0304-121.2416-121.2416 36.1984-36.1984 139.0592 139.0592a25.58976 25.58976 0 0 1 0.256 35.9424l-139.0592 143.1552zM367.36 771.1744l-139.0592-139.0592a25.58976 25.58976 0 0 1-0.256-35.9424L367.104 453.0688l36.7104 35.6864-121.4976 125.0304 121.2416 121.2416-36.1984 36.1472z" fill="#5B90EF" p-id="2846"></path></svg> <h3 style="padding-left: 5px"> <span>其它项目</span> </h3></div><p><span>图形化编程项目（全栈开发）</span></p><p><span>1.移植了JS解释器，实现代码步进、sleep同步、异常代码行数捕获</span></p><p><span>2.实现了终端、迷宫、推箱子、艺术家等十多种游戏</span></p><p><span>3.接入了Monaco（VS Code）作为源码编辑器</span></p><p><span>4.移植了Google Blockly、MIT Scratch。</span></p><p><span>5.基于Flask实现了微信落地页支付、自动登录、无感知登录等</span></p><p><span>6.实现了积木块和源码实时对比、实现了源码运行从而执行控制游戏</span></p><p>&nbsp;</p></div>
</body>
</html>